Add NodaTime Instant serialization for LINQ Select. Closes GH-2866#3949
Merged
jeremydmiller merged 2 commits intoJasperFx:masterfrom Dec 7, 2025
Merged
Conversation
Member
|
@vzakanj Hey, can you double check this? It's failing on the NodaTime tests |
Contributor
Author
|
Looking at the test assertion error below, it seems like it's a precision issue that I'm not able to reproduce locally, i.e. those two tests are passing on my machine. I'll look into into it in more detail and update the PR when I have the fix. |
aafb63b to
ed4a74d
Compare
c91cb2a to
00fa7ac
Compare
00fa7ac to
140e51e
Compare
Contributor
Author
|
@jeremydmiller I've updated the NodaTime tests to account for precision differences and added a comment to the test case to explain the why. |
Member
|
Kicked off CI run. |
This was referenced Dec 8, 2025
This was referenced Jan 26, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #2866
When using default NodaTime serialization, the
Instantis serialized using theExtendedIso(uuuu'-'MM'-'dd'T'HH':'mm':'ss;FFFFFFFFF'Z') format and is saved as such to the data jsonb column.But when the data is read and deserialized the
Instantformat depends on how the data is read:Instantis read as a part of a parent object e.g.session.Query<ParentObj>().SingleAsync(p => p.Id = fooId)then thejsonbis read as is and theInstantproperty is formatted as anExtendedIsostring - not an issueInstantis read by using LINQSelectto project only specific properties from thedatacolumn (e.g.session.Query<ParentObj>().Select(p => new { p.Id, p.InstantProp }).SingleAsync()), in the SQL SELECT statement, the properties are cast to theNpgsqltype the property type maps to.Instantmaps totimestamp with time zoneand when the cast is performed, the format contains the+00:00offset at the end instead of theZ, so the deserialization attempt with theExtendedIsoformat failsI've added the
InstantJsonConverterfor both STJ and Newtonsoft which tries the alternate format deserialization if theExtendedIsodeserialization fails, and have registered it as the Instant converter instead of the defaultNodaPatternConverter<Instant>whenUseNodaTimeis called.This shouldn't be a breaking change, but I've made the
InstantJsonConverterpublic to make it easier to remove and replace with a custom converter when needed.Let me know if you think making it
internalis the better decision choice.